%% Bsp 4.3 - Praktische Anwendung von kNN-, Mahalanobis- und
%% Perceptron-Klassifizierung

% Trainings- und Testset erstellen
feature_count = 8; % Anzahl der verwendeten Features
train_count = 350;  % Anzahl der verwendeten Trainingsdatensaetze
[Tr Te] = create_datasets_naive(train_count);    % 100 Datensaetze Training, der rest Test
% Variablen zum aufnehmen der Ergebnisse initialisieren
kNN_result = zeros(size(Tr,1), 1);
mahala_result = zeros(3, 1);
perco_result = zeros(size(Tr,1), 1)
kNN_time = zeros(size(Tr,1), 1);
mahala_time = zeros(3, 1);
perco_time = zeros(size(Tr,1), 1);

% kNN-Algorithmus ausfuehren fuer alle moeglichen k-Werte
for i = 1 : 140 % in den Testdaten sind nur 135 Elemente der Klasse 1 daher ist es nicht noetig mehr zu durchlaufen
    tic;
    tstart = tic;
    kNN_result(i) = classify_kNN(Tr, Te, i);
    kNN_time(i) = toc(tstart);
end;

% Erkennungsraten des kNN bei der Verwendung naiver Datensets 
% x-Achse = Anzahl der beruecksichtigten Nachbarn
% y-Achse = Erkennungsrate in Prozent
plot(kNN_result(1:50)); 
figure;
plot(kNN_time(1:50));

% Mahalanobis-Klassifizierung durchfuehren
for i = 1 : 3
    tic;
    tstart = tic;
    mahala_result(i) = classify_mahala(Tr, Te, i);
    mahala_time(i) = toc(tstart);
end;

figure;
bar(mahala_result);
figure;
bar(mahala_time);


% Perceptron-Klassifizierung durchfuehren
mode = 1;
for i = 1 : 60 % i = Anzahl der Epochen
    tic;
    tstart = tic;
    perco_result(i) = classify_perceptron(Tr, Te, mode, i);
    perco_time(i) = toc(tstart);
end;

figure;
plot(perco_result(1:70));
figure;
plot(perco_time(1:70));


